package it.gat.client.view;

import it.gat.controller.UtenteController;
import it.gat.model.GruppoUtentiEnum;
import it.gat.model.Utente;
import java.awt.BorderLayout;
import java.awt.Container;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JInternalFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.table.DefaultTableModel;
import javax.swing.JOptionPane;
import javax.swing.JToolBar;
import javax.swing.ImageIcon;

public class UtentiInternalFrame extends JInternalFrame {
	private JTable table;
	private UtentiInternalFrame thisFrame;
	/**
	 * Create the frame.
	 */
	public UtentiInternalFrame(String title,final Container desktop) {
		super(title);
		this.setClosable(true);
		setBounds(0, 0, 800, 600);
		thisFrame = this;
		
		DefaultTableModel model = new DefaultTableModel(getDataTable(),getHeaderTable()){
		    @Override
		    public boolean isCellEditable(int row, int column) {
		       //all cells false
		       return false;
		    }
		};
	    
	    JToolBar toolBar = new JToolBar();
	    getContentPane().add(toolBar, BorderLayout.NORTH);
	    
	    JButton btnNuovo = new JButton("Nuovo");
	    btnNuovo.setIcon(new ImageIcon(UtentiInternalFrame.class.getResource("/it/gat/client/img/Nuovo.png")));
	    btnNuovo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				UtenteInternalFrame utenteInternalFrame = new UtenteInternalFrame("Utente",false,desktop,thisFrame);
				desktop.add(utenteInternalFrame);
				utenteInternalFrame.setVisible(true);
			}});
	    toolBar.add(btnNuovo);
	    
	    JButton btnModifica = new JButton("Modifica");
	    btnModifica.setIcon(new ImageIcon(UtentiInternalFrame.class.getResource("/it/gat/client/img/Modifica.png")));
	    btnModifica.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				UtenteInternalFrame utenteInternalFrame = new UtenteInternalFrame("Utente",true,desktop,thisFrame);
				String username = (String) table.getModel().getValueAt(table.getSelectedRow(), 0);
				UtenteController ac = new UtenteController();
				utenteInternalFrame.setUtente(ac.getUtenteByUsername(username));
				desktop.add(utenteInternalFrame);
				utenteInternalFrame.setVisible(true);
			}});
	    toolBar.add(btnModifica);
	    
	    JButton btnElimina = new JButton("Elimina");
	    btnElimina.setIcon(new ImageIcon(UtentiInternalFrame.class.getResource("/it/gat/client/img/Elimina.png")));
	    btnElimina.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				int n = JOptionPane.showConfirmDialog(
						desktop,
					    "Sei sicuro di eliminare l'elemento selezionato?",
					    "Conferma",
					    JOptionPane.YES_NO_OPTION,
					    JOptionPane.QUESTION_MESSAGE);
				if (n==JOptionPane.YES_OPTION)
				{
					UtenteController ac = new UtenteController();
					String username = (String) table.getModel().getValueAt(table.getSelectedRow(), 0);
					ac.deleteUtente(username);
					refresh();
				}
			}});
	    toolBar.add(btnElimina);
	    table = new JTable(model);
	    
	    
	    table.setRowSelectionInterval(0, 0);

	    JScrollPane scrollPane = new JScrollPane(table);
	    
	    getContentPane().add(scrollPane); 

	    setVisible(true); 

	}
	
	private String[] getHeaderTable()
	{
		String[] columnName = {"Nome Utente","Cognome","Nome","Gruppi"};
		return columnName;
	}
	
	private String[][] getDataTable()
	{
		UtenteController cc = new UtenteController();
		List<Utente> utenti = cc.getUtentiList();
		List<String[]> data = new ArrayList<String[]>();
		for(Utente utente: utenti){
			String strGruppo="";
			switch (utente.getGruppo())
			{
			case AMMINISTRATORI:
				strGruppo = GruppoUtentiEnum.AMMINISTRATORI.toString();
				break;
			case OPERATORI:
				strGruppo = GruppoUtentiEnum.OPERATORI.toString();
				break;
			case TECNICI:
				strGruppo = GruppoUtentiEnum.TECNICI.toString();
				break;
			case CLIENTI:
				strGruppo = GruppoUtentiEnum.CLIENTI.toString();
				break;
			}
			String[] utenteArray = {utente.getNomeUtente(),
						                utente.getCognome(),
						                utente.getNome(),
						                strGruppo};
				data.add(utenteArray);
			}
		return data.toArray(new String[0][0]);
	}
	
	public void refresh()
	{
		DefaultTableModel model = new DefaultTableModel(getDataTable(),getHeaderTable()){
		    @Override
		    public boolean isCellEditable(int row, int column) {
		       //all cells false
		       return false;
		    }
		};
		table.setModel(model);
	}
}
